Java使用位域进行多标记(状态)管理 |
您所在的位置:网站首页 › int logo › Java使用位域进行多标记(状态)管理 |
Android中位域的应用
在Android中,我们会经常用到或者看到以下这样的代码 : public class ExampleUnitTest { @Test public void gravityTest(LayoutParams params) { // 视图在layout中右下角显示 params.gravity = Gravity.RIGHT | Gravity.BOTTOM; } @Test public void intentFlagTest(Intent intent) { // 清空任务栈中所有旧的activity intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // 如果activity已存在于栈中,清空该activity之上的所有任务 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); } @Test public void windowMangerFlags(WindowManager.LayoutParams params) { // 不拦截视图以外的事件,在锁屏中显示 params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; } }通过一个 int字段,来添加多个 标志或者状态. 一个int字段,能够管理多个标记(状态)值. 如此神奇的操作怎样实现的呢? 答案就是通过位运算来实现. 位操作基础java中提供的基础位运算符有 与(&),或(|),非(~),异或(^),左移)和无符号右移(>>>). 除了位非(~)是一元操作符外,其它的都是二元操作符。 下面只介绍本文中,使用到的位操作 按位与A & B : A和B对应的二进制数位都为1时,结果才为1,其他情况为0. A = 001101 // 13 B = 100101 // 37 A & B = 000101 // 5 按位或A | B : A和B对应的二进制数位都为0时,结果才为0,其他情况为1. A = 001101 // 13 B = 100101 // 37 A | B = 101101 // 45 按位非~A : 将a的二进制表示每一位进行取反操作,0变1,1变0. 相当于相反数 - 1 A = 001101 // 13 ~A = 11111111111111111111111111110010 // int32位,补码表示,第一位为符号位 // 根据上诉补码转原码为 // 10000000000000000000000000001110 // -14 左移操作A |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |